#include "gpio_test.h"

void led_init(uint8_t led)
{
    printf("Led init use iothardware driver...\n");
    // 初始化GPIO结构
    LL_CONFIG_GPIO(led, LL_GPIO_MODE_OUTPUT, LL_GPIO_PULL_NO, LL_GPIO_SPEED_FREQ_HIGH, LL_GPIO_OUTPUT_PUSHPULL, LL_GPIO_AF_0);
    // 初始化GOIO
    IoTGpioInit(led);
    // 设置GPIO输出模式
    IoTGpioSetDir(led, IOT_GPIO_DIR_OUT);
    // 输出高电平关灯
    IoTGpioSetOutputVal(led, IOT_GPIO_VALUE1);
}
// 开灯
void led_on(unsigned char led)
{
    IoTGpioSetOutputVal(led, LED_ON);   
}
// 关灯
void led_off(unsigned char led)
{
    IoTGpioSetOutputVal(led, LED_OFF);
}
// LED状态
uint16_t led_state(unsigned char led)
{
	IotGpioValue value;
	IoTGpioGetOutputVal(LED1, &value);
	return value;
}
/*********************** 中断 ************************/
// 中断处理函数
static void iot_key_handler(uint16_t pin, char *arg)
{
	printf("enter interrupt %u\n", led_state(LED1));
	if(led_state(LED1)==LED_OFF)
		led_on(LED1);
	else
		led_off(LED1);
}
// 初始化KEY
static void key_init(uint16_t key)
{
    printf("Key init use iothardware driver...\n");
    // 初始化GPIO结构
    LL_CONFIG_GPIO(key, LL_GPIO_MODE_INPUT, LL_GPIO_PULL_UP, LL_GPIO_SPEED_FREQ_HIGH, LL_GPIO_OUTPUT_PUSHPULL, LL_GPIO_AF_0);
    // 初始化GPIO
    IoTGpioInit(key);
    // 设置GPIO为输入
    IoTGpioSetDir(key, IOT_GPIO_DIR_IN);
    // 注册中断入口
    IoTGpioRegisterIsrFunc(key, IOT_INT_TYPE_EDGE, IOT_GPIO_EDGE_FALL_LEVEL_LOW, iot_key_handler, NULL);
}
/*********************** 任务函数 ***********************/
void gpio_entry()
{
	led_init(LED1);
	led_on(LED1);
    key_init(KEY1);
}

void gpio_task()
{
    UINT32 uwRet = -1;
    UINT32 taskID = 0;
    TSK_INIT_PARAM_S stTask = {0};
    stTask.pfnTaskEntry = (TSK_ENTRY_FUNC)gpio_entry;
    stTask.uwStackSize = 0x1000;
    stTask.pcName = "gpio test task";
    stTask.usTaskPrio = 10;
    uwRet = LOS_TaskCreate(&taskID, &stTask);
    if (uwRet != LOS_OK) {
        printf("Task fs create failed\n");
    }
}